package com.atguigu1.core.rdd

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 *
 * @description: 文件数据分区分布测试
 * @time: 2021-03-12 11:45
 * @author: baojinlong
 **/
object Spark06FileRddDistribute {
  def main(args: Array[String]): Unit = {
    val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("rdd")
    // 设置rdd分区数字
    val sparkContext = new SparkContext(sparkConf)
    /**
     * 1.数据是按照行为单位进行读取,和字节数没有关系
     * 2.数据读取时候以偏移量为单位,偏移量不会被重复读取
     * 1@@ 012
     * 2@@ 345
     * 3   6
     * 3.数据分区的偏移量范围计算7/2=3
     * 0 =>[0,3] 12
     * 1 =>[3,6] 3
     * 2 =>[6,7]
     * 如果有多个文件则按照总体的分区规则和偏移量来统计14/2=7 14/7=2 则就是2个分区
     * 1234567@@  012345678
     * 89@@       9 10 11 12
     * 0          13
     *
     * 0 =>[0,7] 1234567
     * 1 =>[7,14] 89@@0
     */
    val rddValue: RDD[String] = sparkContext.textFile("datas/1.txt", 2)
    // 首先获取数组长度5
    rddValue.saveAsTextFile("outputxx")
    // 关闭环境
    sparkContext.stop()

    /**
     * 文件分区数量计算方式:
     * totalSize=7Byte
     * goalSize=7/2=3Byte每个分区需要保存3个字节
     * 7/3=2 余下1 1/每个分区的字节数=1/3=0.333>0.1则新增一个分区hadoop
     */
  }

}
